package com.ruoyi.employee.service.impl;

import java.util.List;
import java.util.Map;

import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.employee.mapper.HrContractMapper;
import com.ruoyi.employee.domain.HrContract;
import com.ruoyi.employee.service.IHrContractService;

/**
 * 合同管理Service业务层处理
 *
 * @author hango
 * @date 2025-10-19
 */
@Service
public class HrContractServiceImpl implements IHrContractService
{
    @Autowired
    private HrContractMapper hrContractMapper;

    /**
     * 查询合同管理
     *
     * @param id 合同管理主键
     * @return 合同管理
     */
    @Override
    public HrContract selectHrContractById(Long id)
    {
        return hrContractMapper.selectHrContractById(id);
    }

    /**
     * 查询合同管理列表
     *
     * @param hrContract 合同管理
     * @return 合同管理集合
     */
    @Override
    public List<HrContract> selectHrContractList(HrContract hrContract)
    {
        return hrContractMapper.selectHrContractList(hrContract);
    }

    /**
     * 查询合同管理列表（联表：员工/公司/部门/岗位）
     *
     * @param hrContract 合同管理
     * @return 列表数据（Map 结构，包含展示字段）
     */
    @Override
    public List<Map<String, Object>> selectHrContractListWithJoin(HrContract hrContract)
    {
        return hrContractMapper.selectHrContractListWithJoin(hrContract);
    }

    /**
     * 查询合同管理（联表详情）
     *
     * @param id 合同管理主键
     * @return 详情数据（Map 结构，包含展示字段）
     */
    @Override
    public Map<String, Object> selectHrContractByIdWithJoin(Long id)
    {
        return hrContractMapper.selectHrContractByIdWithJoin(id);
    }

    /**
     * 新增合同管理
     *
     * @param hrContract 合同管理
     * @return 结果
     */
    @Override
    public int insertHrContract(HrContract hrContract)
    {
        // 时间
        hrContract.setCreateTime(DateUtils.getNowDate());
        hrContract.setUpdateTime(DateUtils.getNowDate());
        if (hrContract.getEmpId() == null) throw new ServiceException("缺少员工ID");


        // 默认值兜底：状态、删除标记、提醒天数
        if (hrContract.getStatus() == null || "".equals(hrContract.getStatus())) {
            hrContract.setStatus("0"); // 生效中
        }
        if (hrContract.getDelFlag() == null || "".equals(hrContract.getDelFlag())) {
            hrContract.setDelFlag("0"); // 未删除
        }
        if (hrContract.getRemindDaysProbation() == null) {
            hrContract.setRemindDaysProbation(7);
        }
        if (hrContract.getRemindDaysContract() == null) {
            hrContract.setRemindDaysContract(60);
        }

        return hrContractMapper.insertHrContract(hrContract);
    }

    /**
     * 修改合同管理
     *
     * @param hrContract 合同管理
     * @return 结果
     */
    @Override
    public int updateHrContract(HrContract hrContract)
    {
        // 时间
        hrContract.setUpdateTime(DateUtils.getNowDate());

        // 默认值兜底：提醒天数（不传时继续给默认，避免被置空）
        if (hrContract.getRemindDaysProbation() == null) {
            hrContract.setRemindDaysProbation(7);
        }
        if (hrContract.getRemindDaysContract() == null) {
            hrContract.setRemindDaysContract(60);
        }

        return hrContractMapper.updateHrContract(hrContract);
    }

    /**
     * 批量删除合同管理
     *
     * @param ids 需要删除的合同管理主键
     * @return 结果
     */
    @Override
    public int deleteHrContractByIds(Long[] ids)
    {
        // Mapper 中已改为逻辑删除：del_flag = '1'
        return hrContractMapper.deleteHrContractByIds(ids);
    }

    /**
     * 删除合同管理信息
     *
     * @param id 合同管理主键
     * @return 结果
     */
    @Override
    public int deleteHrContractById(Long id)
    {
        // Mapper 中已改为逻辑删除：del_flag = '1'
        return hrContractMapper.deleteHrContractById(id);
    }
}
